<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>天气案例_监视属性</title>
    <!-- 引入Vue.js -->
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 准备好一个容器 -->
    <div id="root">
      <h2>今天天气很{{weather}}</h2>
      <button @click="changeWeather">切换天气</button>
    </div>
  </body>
  <script>
    const vm = new Vue({
      el: "#root",
      data() {
        return {
          isHot: true,
        };
      },
      // 计算属性
      computed: {
        weather() {
          return this.isHot ? "炎热" : "凉爽";
        },
      },
      // 方法
      methods: {
        changeWeather() {
          this.isHot = !this.isHot;
        },
      },
      // 监视属性
      watch: {
        isHot: {// isHot：要被监视的属性名
          immediate: true, // 初始化时让 handler 调用一下
          // handler什么时候调用? 当isHot发生改变时
          handler(newValue, oldValue) {
            // handler有两个参数 newValue:修改后的值,oldValue:修改前的值
            console.log(
              `天气变化为:${newValue},之前的天气为:${oldValue}`
            );
          },
        },
        weather: {// 可以监视计算属性
          immediate: true, // 初始化时让 handler 立即执行一次
          handler(newValue, oldValue) {
            console.log(
              `计算属性weather被修改了,新值为：${newValue},旧值为：${oldValue}`
            );
          },
        },
      },
    });
    
    // 使用 vm 监视属性
    vm.$watch("isHot",{
      handler(newValue,oldValue){
        immediate: true,
        console.log(`天气变化为:${newValue},之前的天气为:${oldValue}`);
      }
    })
  </script>
</html>
